/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entities;

import edu.upc.poo.mercado.enums.Destino;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author alumno
 */
public class ManagerMercado {

    private List<Mercado> mercados;
    private static ManagerMercado instance = null;

    public ManagerMercado() {
        this.mercados = new ArrayList<Mercado>();
        this.load_init();
    }

    private static void createInstance() {
        synchronized (ManagerMercado.class) {
            // En la zona sincronizada sería necesario volver a comprobar que no se ha creado la instancia
            if (instance == null) {
                instance = new ManagerMercado();
            }
        }
    }

    public List<Mercado> getMercados() {
        return mercados;
    }
    
    public void addMercado(Mercado mercado){
        mercados.add(mercado);
    }

    public Mercado getMercado(Destino destino) {
        Mercado mercado = null;
        for (Mercado mer : mercados) {
            if (mer.getUbicacion() == destino) {
                mercado = mer;
                break;
            }
        }
        return mercado;
    }

    public static ManagerMercado getInstance() {
        createInstance();
        return instance;
    }

    //El método "clone" es sobreescrito por el siguiente que arroja una excepción:
    @Override
    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }
    
    private void load_init(){
        Mercado mercado = new Mercado(Destino.SAN_MIGUEL);        
        ManagerProducto mProductos = ManagerProducto.getInstance();
        mercado.addProductoMercado(mProductos.getProducto(0), 20.0);
        mercado.addProductoMercado(mProductos.getProducto(1), 30.0);
        mercado.addProductoMercado(mProductos.getProducto(2), 20.0);
        addMercado(mercado);
        mercado = new Mercado(Destino.LA_PERLA);
        mercado.addProductoMercado(mProductos.getProducto(0), 15.0);
        mercado.addProductoMercado(mProductos.getProducto(1), 20.0);
        mercado.addProductoMercado(mProductos.getProducto(2), 10.0);
        addMercado(mercado);
        mercado = new Mercado(Destino.CALLAO);
        mercado.addProductoMercado(mProductos.getProducto(0), 10.0);
        mercado.addProductoMercado(mProductos.getProducto(1), 15.0);
        mercado.addProductoMercado(mProductos.getProducto(2), 5.0);
        addMercado(mercado);
    }
}
